<template>
  <div>111</div>
</template>

<script setup>
import { ref, onMounted } from "vue";

onMounted(() => {
  function ListNode(val, next) {
    this.val = val === undefined ? 0 : val;
    this.next = next === undefined ? null : next;
  }

  function addTwoNumbers(l1, l2) {
    console.log(111);
    let sum = new ListNode("0"); // 创建一个头链表用于保存结果
    let head = sum; // 保存头链表的位置用于最后的链表返回
    let addOne = 0;
    while (addOne || l1 || l2) {
      //在两个链表之中有一个存在的前提下执行下面的逻辑
      let val1 = l1 !== null ? l1.val : 0;
      let val2 = l2 !== null ? l2.val : 0;
      let r1 = val1 + val2 + addOne; //求和
      addOne = r1 >= 10 ? 1 : 0;
      sum.next = new ListNode(r1 % 10); //sum的下一个节点
      sum = sum.next; //sum指向下一个节点
      if (l1) l1 = l1.next; //l1指向下一个节点，以便计算第二个节点的值
      if (l2) l2 = l2.next; //l2指向下一个节点，以便计算第二个节点的值
    }
    return console.log(head.next);
  }

  addTwoNumbers([2, 4, 3], [5, 6, 4]);

  // 插入排序
  function insertionSort(arr) {
    const n = arr.length;
    for (let i = 1; i < n; i++) {
      const key = arr[i];
      let j = i - 1;
      while (j >= 0 && arr[j] > key) {
        arr[j + 1] = arr[j];
        j--;
      }
      arr[j + 1] = key;
    }
    return arr;
  }

  const arr = [12, 11, 13, 5, 6];
  console.log("arr", insertionSort(arr));

/**
 * 编程题：寻找岛屿
 * 给一个0 1矩阵，求不同的岛屿的个数。
 * 0代表海，1代表岛，如果两个1相邻，那么这两个1属于同一个岛。我们只考虑上下左右为相邻
 */
/**
 * 思路：
 * 发现新岛屿，count数量加 1
 */
  function numIslands(grid) {
    if (!grid || grid.length === 0) {
      return 0;
    }

    const rows = grid.length; // 矩阵高度
    const cols = grid[0].length; // 矩阵长度。注意这里假设每行宽度一致
    let count = 0; // 用来记录新岛屿的个数

    // 深度优先搜索函数
    function dfs(i, j) {
      // 检查边界条件以及当前位置是否为 0
      if (i < 0 || i >= rows || j < 0 || j >= cols || grid[i][j] === 0) {
        return;
      }
      // 将当前位置标记为已访问
      grid[i][j] = 0;
      // 递归访问上下左右四个相邻位置
      dfs(i - 1, j); // 上
      dfs(i + 1, j); // 下
      dfs(i, j - 1); // 左
      dfs(i, j + 1); // 右
    }

    // 遍历矩阵
    for (let i = 0; i < rows; i++) {
      for (let j = 0; j < cols; j++) {
        if (grid[i][j] === 1) {
          // 发现新岛屿，数量加 1
          count++;
          // 使用 DFS 标记该岛屿的所有 1 为已访问
          dfs(i, j);
        }
      }
    }

    return count;
  }

  // 示例用法
  const grid = [
    [1, 1, 0, 0, 0],
    [1, 1, 0, 0, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 0, 1, 1],
  ];

  const islandCount = numIslands(grid);
  console.log("不同岛屿的个数为: ", islandCount);
});
</script>